package dal

import (
	"fmt"

	. "7qule.com/sd3/CrossServer/src/bll/player/model"
	baseDal "7qule.com/sd3/CrossServer/src/dal"
	"public.com/goutil/timeUtil"
)

// 用户信息访问结构
type globalGuildDal struct{}

// 访问结构对象
var GlobalGuildDal = new(globalGuildDal)

// 初始化
func init() {
	// 注册到同步对象中
	//baseDal.GetSyncMgr().RegisterSyncObj(GlobalGuildDal.TableName())
}

// TableName 表名
func (this *globalGuildDal) TableName() string {
	return "g_guild"
}

// GetData 从数据库获取玩家数据
// dataContainer:玩家对象
// 返回值:
// interface{}:获取到的数据
// error:错误信息
func (this *globalGuildDal) GetData() ([]*GlobalGuild, error) {
	sql := "SELECT `GuildId`,`GuildName`,`Lv`,`Flag`,`Logo`,`BannerInfo`,`ServerGroupId`,`ServerId`,`ServerName`,`UpdateTime` FROM `g_guild`;"

	db := baseDal.GetGameDB().DB()
	execResult, err := db.Query(sql)
	if err != nil {
		baseDal.WriteLog("GlobalGuildDal", err)

		return nil, err
	}

	defer execResult.Close()

	// 读取数据
	var result = make([]*GlobalGuild, 0, 16)
	for execResult.Next() {
		var tempNewItem = NewGlobalGuild2()
		err = execResult.Scan(
			&tempNewItem.GuildId,
			&tempNewItem.GuildName,
			&tempNewItem.Lv,
			&tempNewItem.Flag,
			&tempNewItem.Logo,
			&tempNewItem.BannerInfo,
			&tempNewItem.ServerGroupId,
			&tempNewItem.ServerId,
			&tempNewItem.ServerName,
			&tempNewItem.UpdateTime)

		if err != nil {
			baseDal.WriteLog("GlobalGuildDal", err)
			return nil, err
		}

		result = append(result, tempNewItem)
	}

	return result, nil
}

// Insert 插入数据
// dataContainer:玩家对象
// redisData:redis数据
// data:操作的数据项
func (this *globalGuildDal) Insert(data *GlobalGuild) {
	sql := fmt.Sprintf("INSERT INTO `g_guild` (`GuildId`,`GuildName`,`Lv`,`Flag`,`Logo`,BannerInfo,`ServerGroupId`,`ServerId`,`ServerName`,`UpdateTime`) VALUES ('%v', '%v', %v, '%v', '%v','%v', %v, %v, '%v', '%v') ;",
		data.GuildId,
		data.GuildName,
		data.Lv,
		data.Flag,
		data.Logo,
		data.BannerInfo,
		data.ServerGroupId,
		data.ServerId,
		data.ServerName,
		timeUtil.ToDateTimeString(data.UpdateTime))

	baseDal.GetGameDB().Exec(sql)
}

// Update 更新数据
// dataContainer:玩家对象
// redisData:最新redis数据
// data:操作的数据项
func (this *globalGuildDal) Update(data *GlobalGuild) {
	sql := fmt.Sprintf("REPLACE INTO `g_guild` SET  `GuildName`='%v',`Lv`=%v,`Flag`='%v',`Logo`='%v',`BannerInfo`='%v',`ServerGroupId`=%v,`ServerId`=%v,`ServerName`='%v',`UpdateTime`='%v', `GuildId`='%v';",
		data.GuildName,
		data.Lv,
		data.Flag,
		data.Logo,
		data.BannerInfo,
		data.ServerGroupId,
		data.ServerId,
		data.ServerName,
		timeUtil.ToDateTimeString(data.UpdateTime),
		data.GuildId)
	baseDal.GetGameDB().Exec(sql)
}

// Delete 删除数据
// dataContainer:玩家对象
// redisData:最新redis数据
// data:操作的数据项
func (this *globalGuildDal) Delete(guildId string) {
	sql := fmt.Sprintf("DELETE FROM g_guild where`GuildId`='%v';", guildId)

	baseDal.GetGameDB().Exec(sql)
}
